<js>浅拷贝
概念
浅拷贝
Object.assign()
1 | const obj1 = {a:1} |
扩展运算符
1 | const obj1 = { a: { c: 2 }, b: 1 }; |
conact拷贝数组
1 | const arr1 = [1,2,{a: 1}] |
slice拷贝数组
1 | const arr1 = [1,2,{a: 1}] |
代码实现浅拷贝
1 | function clone(target) { |
深拷贝
JSON.stringfy
- 存在问题:
- 函数、undefined、symbol 会消失
- Date 引用类型会变成字符串
- 不可枚举属性无法拷贝
- 无法拷贝对象的原型链
- 拷贝 RegExp 引用类型会变成空对象
- 有 NaN、Infinity 以及 -Infinity 会变成 null
- 无法拷贝对象的循环应用,即对象成环 (obj[key] = obj) 错误信息:Uncaught TypeError: Converting circular structure to JSON
1 | function deepClone(target) { |
递归实现
1 | function clone(value) { |
考虑循环嵌套情况
1 | function deepClone(target, cache = new WeakMap()) { |
1 | const deepClone = function (obj, hash = new WeakMap()) { |